import 'package:flutter/material.dart';
import 'package:flutter_easyrefresh/easy_refresh.dart';
import 'package:live_music/components/feedback/PageFeedBack.dart';
import 'package:live_music/components/index/momentCard.dart';
import 'package:live_music/components/ui/theme.dart';
import 'package:live_music/models/user_info_model.dart';
import 'package:live_music/pages/friendList/widget/list_card_friend.dart';
import 'package:live_music/pages/other/friendList/widget/list_card_friend.dart';
import 'package:live_music/services/userService.dart';

class OtherFriendListPage extends StatefulWidget {
  final int type;
  final int userId;
  OtherFriendListPage({Key key, this.type, this.userId}) : super(key: key);

  @override
  _OtherFriendListPageState createState() => _OtherFriendListPageState();
}

class _OtherFriendListPageState extends State<OtherFriendListPage>
    with AutomaticKeepAliveClientMixin {
  // 下拉刷新控制器
  EasyRefreshController _easyRefreshController;
  // 独立的滚动视图 防止tab切换时触发下拉刷新
  ScrollController _scrollController;
  // 列表数组模型
  List<UserInfoModel> _userListModel;
  int pageNo = 1;
  int pageSize = 20;
  bool hasMore = true;
  bool loading = true;
  bool error = false;
  String errorMsg;

  @override
  void initState() {
    super.initState();
    _easyRefreshController = EasyRefreshController();
    _scrollController = ScrollController();
    getData();
  }

  @override
  void dispose() {
    _easyRefreshController.dispose();
    _scrollController.dispose();
    super.dispose();
  }

  getData({bool replace = true}) async {
    try {
      Map<String, dynamic> data = {
        "pageNo": pageNo,
        "pageSize": pageSize,
        "friendType": "FOLLOW",
        "userId": widget.userId
      };
      if (widget.type == 2) {
        data['friendType'] = "FANS";
      }
      Map<String, dynamic> result = await UserService.queryUserFriend(data);
      List<dynamic> userList = result['body'];
      UserListModel userListModel = UserListModel.fromJson(userList);
      setState(() {
        pageNo++;
        hasMore = pageSize == userListModel.list.length;
        if (replace) {
          _userListModel = userListModel.list;
        } else {
          _userListModel.addAll(userListModel.list);
        }
      });
    } catch (e) {
      setState(() {
        error = true;
        errorMsg = e.toString();
      });
    } finally {
      setState(() {
        loading = false;
      });
    }
  }

  // 刷新回调(null为不开启刷新)
  Future _onRefresh() async {
    setState(() {
      pageNo = 1;
    });
    await getData(replace: true);
    if (error) {
      setState(() => error = false);
    }
    // 恢复刷新状态 使onLoad再次可用
    _easyRefreshController.resetLoadState();
  }

  // 加载回调(null为不开启加载)
  Future _onLoad() async {
    if (hasMore) {
      await getData(replace: false);
    }
    // // 结束加载

    // _easyRefreshController.finishLoad(success: true, noMore: !hasMore);
    await Future.delayed(const Duration(seconds: 0), () {
      _easyRefreshController.finishLoad(success: true, noMore: !hasMore);
    });
  }

  @override
  Widget build(BuildContext context) {
    super.build(context);
    double screeHeight = MediaQuery.of(context).size.height;
    return Column(children: [
      // search(),
      Container(
          height: screeHeight - 137,
          child: EasyRefresh(
              firstRefresh: true,
              firstRefreshWidget: PageFeedBack(firstRefresh: true).build(),
              emptyWidget: PageFeedBack(
                loading: loading,
                error: error,
                empty: _userListModel.isEmpty,
                errorMsg: errorMsg,
                onErrorTap: () => _easyRefreshController.callRefresh(),
                onEmptyTap: () => _easyRefreshController.callRefresh(),
              ).build(),
              header: ClassicalHeader(),
              footer: ClassicalFooter(),
              controller: _easyRefreshController,
              enableControlFinishRefresh: false,
              enableControlFinishLoad: true,
              onRefresh: _onRefresh,
              onLoad: _userListModel.isEmpty ? null : _onLoad,
              child: ListView.builder(
                  controller: _scrollController,
                  itemCount: _userListModel.length,
                  itemBuilder: (BuildContext context, int index) {
                    return Container(
                        color: Colors.white,
                        child: OtherListCardFriend(
                            userListItem: _userListModel[index], index: index));
                  })))
    ]);
  }

  Container search() {
    return Container(
      margin: const EdgeInsets.only(top: 12),
      padding: const EdgeInsets.symmetric(horizontal: 12),
      height: 36,
      child: Container(
        decoration: BoxDecoration(
          borderRadius: BorderRadius.circular(24),
          color: WcaoTheme.bgColor,
        ),
        child: TextField(
          enableSuggestions: false,
          autocorrect: false,
          style: TextStyle(fontSize: WcaoTheme.fsBase),
          decoration: const InputDecoration(
            hintText: "请输入搜索关键词",
            contentPadding: EdgeInsets.symmetric(vertical: 0, horizontal: 16),
            enabledBorder: OutlineInputBorder(
              borderSide: BorderSide.none,
            ),
            focusedBorder: OutlineInputBorder(
              borderSide: BorderSide.none,
            ),
          ),
        ),
      ),
    );
  }

  @override
  bool get wantKeepAlive => true;
}
